home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Original Shareware 1.1
/
The Original Shareware (WeMake CDs)(Volume 1.1)(CDs, Inc)(1993).iso
/
19
/
envi.zip
/
PARSPATH.INC
< prev
next >
Wrap
Text File
|
1986-02-06
|
3KB
|
112 lines
{$I DOS.INC}
{$I ENVIRONM.INC}
TYPE
FNameType = STRING[12];
PathPtr = ^PathRec;
PathRec = RECORD
PName : BigString;
Next : PathPtr;
END;
VAR
StartPR,
ThisPR,
NextPR : PathPtr;
PROCEDURE MakePath(ThePath : BigString);
{BigString is declared in EVNIRONM.INC.}
PROCEDURE ParsePath(PathStr : BigString);
VAR
PosSemi,
PosSlash,
PosColon,
NextSlash,
LPS : Byte;
Done : Boolean;
PROCEDURE IncSlash;
BEGIN
NextSlash := Pos('\', Copy(PathStr, PosSlash+1, LPS-PosSlash));
IF NextSlash = 0 THEN Done := True;
PosSlash := PosSlash+NextSlash;
END; {IncSlash}
BEGIN {ParsePath}
Done := False;
LPS := Length(PathStr);
IF PathStr[LPS] <> ';' THEN BEGIN
PathStr := PathStr+';';
LPS := LPS+1;
END; {if PathStr[LPS]<>';'}
IF PathStr[LPS-1] <> '\' THEN BEGIN
Insert('\', PathStr, LPS);
LPS := LPS+1;
END; {if PathStr[LPS - 1]<>'\'}
PosSemi := Pos(';', PathStr);
IF PosSemi <> LPS THEN BEGIN
ParsePath(Copy(PathStr, 1, PosSemi));
ParsePath(Copy(PathStr, PosSemi+1, LPS-PosSemi));
END {if PosSemi<>LPS}
ELSE BEGIN {PosSemi = LPS}
PosColon := Pos(':', PathStr);
PosSlash := Pos('\', PathStr);
IF PosColon IN [0, 2] THEN BEGIN
IF (PosColon = 2) AND (PosSlash = 3) THEN BEGIN
IncSlash;
Done := False;
END; {if (PosColon = 2) and (PosSlash = 3)}
REPEAT {until Done}
ThisPR^.PName := Copy(PathStr, 1, PosSlash);
New(ThisPR^.Next);
ThisPR := ThisPR^.Next;
ThisPR^.PName := '';
ThisPR^.Next := NIL;
IncSlash;
UNTIL Done;
END; {if PosColon in [0, 2]}
END; {else PosSemi = LPS}
END; {ParsePath}
BEGIN {MakePath}
New(StartPR);
StartPR^.PName := '';
StartPR^.Next := NIL;
ThisPR := StartPR;
ParsePath(ThePath);
END; {MakePath}
VAR
FName : FNameType;
AFile : FILE;
WordOut,
WordIn : BigString;
Done : Boolean;
Result : Integer;
BEGIN {test ParsePath}
FName := ParamStr(1);
Done := False;
IF FoundInEnv('PATH', WordOut) THEN MakePath(WordOut);
ThisPR := StartPR;
REPEAT {until Done}
IF ThisPR^.PName = '' THEN Done := True;
IF NOT Done THEN BEGIN
Assign(AFile, ThisPR^.PName+FName);
{$I-} Reset(AFile); {$I+}
Result := IOResult;
END; {if not Done}
IF Result = 0 THEN WriteLn('Found ', FName, ' in ', ThisPR^.PName);
IF NOT Done THEN ThisPR := ThisPR^.Next;
UNTIL Done;
ThisPR := StartPr;
REPEAT {until NextPR = nil}
NextPR := ThisPR^.Next;
Dispose(ThisPR);
ThisPR := NextPR;
UNTIL NextPR = NIL;
END.